<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>03-数组去重的方法</title>
</head>
<body>
  <script>
    // 1. 双重循环

    // 2. indexOf + for
    function removeRepeat(arr){
      const res = []
      for(let i = 0; i < arr.length; i++) {
        res.indexOf(arr[i]) === -1 && res.push(arr[i])
      }
    }

    // 3. filter
    function removeRepeat(arr){
      return arr.filter((item, index) => arr.indexOf(item) === index)
    }

    // 4. Object 键值对
    function removeRepeat(arr) {
      let obj = {}
      // 因为1 和 '1' 是不同的，所以使用typeof item + item 拼成字符串作为 key 值
      return arr.filter(item => obj.hasOwnProperty(typeof item + item) ? false : (obj[typeof item + item] = true))
    }
    
    // 5. Map + filter
    function removeRepeat(arr) {
      let map = new Map()
      return arr.filter(item => map.get(item) ? false : map.set(item, item))
    }

    // 6. set 
    function removeRepeat(arr){
      return [...new Set(arr)]
    }
    const arr = [1, 3, 5, 5, 4, 9, '1', 4]
    console.log(removeRepeat(arr))
  </script>
</body>
</html>